package com.gitee.denger.mybatis.example.ext.analytical;

import java.lang.annotation.Annotation;

/**
 * 设置值的接口
 *
 * @author 登琼
 */
public interface IExampleCriteriaValue {

    /**
     * 设置值
     *
     * @param annotation 使用的注解
     * @param criteria   过滤对象
     * @param fieldName  属性名
     * @param fieldValue 值
     */
    void setForTk(Annotation annotation, Object criteria, String fieldName, Object fieldValue);

    /**
     * 设置值
     *
     * @param annotation 使用的注解
     * @param criteria   过滤对象
     * @param fieldName  属性名
     * @param fieldValue 值
     */
    void set(Annotation annotation, Object criteria, String fieldName, Object fieldValue);


    /**
     * 首字母小写
     *
     * @param str 字符串
     * @return 小写的字符串
     */
    default String lowerCaseForFirst(String str) {
        char[] chars = str.toCharArray();
        chars[0] = Character.toLowerCase(chars[0]);
        return new String(chars);
    }

    /**
     * 首字母大写
     *
     * @param str 字符串
     * @return 小写的字符串
     */
    default String upperCaseForFirst(String str) {
        char[] chars = str.toCharArray();
        chars[0] = Character.toUpperCase(chars[0]);
        return new String(chars);
    }

    /**
     * 获取方法名
     *
     * @param annotation 注解
     * @param fieldName  字段名称
     * @return 方法名
     */
    default String getMethodName(Annotation annotation, String fieldName) {
        return "and" + upperCaseForFirst(fieldName) + annotation.annotationType().getSimpleName().substring(3);
    }
}
